/**
 * 方法1：像这种题目，实现暴力做法肯定肯定是没问题的，标记一个 single
 * 为唯一出现的数，双重循环遍历，第一遍的时候用来假设当前
 * nums[i] 为唯一的，然后第二遍再扫一次，看看除了当前索引 i
 * 外，其他索引对应的数据是否为也为 a[i]，时间复杂度为 O(n^2)
 * 方法2：使用 hash 表，使用一个 map 存储，key 为数值，value
 * 为出现次数，然后寻找 map 中 value 为 1 的数，时间复杂度
 * 和空间复杂度均为 O(n)
 * 方法3：方法 3 只能针对该题而言，因为该题有一个很特殊的条件，即只有 1
 * 个数出现次数为 1，其他数的出现次数均为 2 ，所以可以考虑使用
 * 异或运算，a^b^a = a^a^b = b
 */
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
  int singleNumber(vector<int> &nums) {
    int ans = 0;
    for (auto num : nums) {
      ans ^= num;
    }
    return ans;
  }
};